home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / +look_here_1st!+ / reader_requests / alienbreed3d2 / cheesesauce / airoutine.s < prev    next >
Text File  |  1997-11-28  |  35KB  |  2,319 lines

  1. lastx EQU 0
  2. lasty EQU 2
  3. lastzone EQU 4
  4. lastcpt EQU 6
  5. SEENBY equ 8
  6. DAMAGEDONE equ 10
  7. DAMAGETAKEN equ 12
  8.  
  9. DEFAULTMODE: dc.w 0
  10. RESPONSEMODE: dc.w 0
  11. FOLLOWUPMODE: dc.w 0
  12. RETREATMODE: dc.w 0
  13. CURRENTMODE: dc.w 0
  14. prowlspeed: dc.w 0
  15. responsespeed: dc.w 0
  16. retreatspeed: dc.w 0
  17. followupspeed: dc.w 0
  18. FOLLOWUPTIMER: dc.w 0
  19. REACTIONTIME: dc.w 0
  20. MIDDLECPT: dc.w 0
  21. VECOBJ: dc.w 0
  22.  
  23. PLAYERONENOISEVOL: dc.w 0
  24. PLAYERTWONOISEVOL: dc.w 0
  25.  
  26. AIROUTINE:
  27.  
  28.  move.w #-20,2(a0)
  29.  
  30. ; bsr CHECKDAMAGE
  31. ; tst.b numlives(a0)
  32. ; bgt.s .notdeadyet
  33. ; rts
  34. ;.notdeadyet:
  35.  
  36.  cmp.b #1,currentmode(a0)
  37.  blt DODEFAULT
  38.  beq DORESPONSE
  39.  
  40.  cmp.b #3,currentmode(a0)
  41.  blt DOFOLLOWUP
  42.  beq DORETREAT
  43.  
  44.  cmp.b #5,currentmode(a0)
  45.  beq DODIE
  46.  
  47. DOTAKEDAMAGE:
  48.  
  49.  jsr WALKANIM
  50.  move.w 4(a0),-(a7)
  51.  bsr GETROOMSTATSSTILL
  52.  
  53.  move.w (a7)+,d0
  54.  cmp.w #1,DEFAULTMODE
  55.  blt .notflying
  56.  
  57.  move.w d0,4(a0)
  58. .notflying
  59.  
  60.  tst.b FINISHEDANIM
  61.  beq.s stillhurting
  62.  move.b #0,currentmode(a0)
  63.  move.b #0,WhichAnim(a0)
  64.  move.w #0,SecTimer(a0)
  65.  
  66. stillhurting:
  67.  
  68.  bsr DOTORCH
  69.  
  70.  tst.w 12-64(a0)
  71.  blt.s .nocopyin
  72.  move.w 12(a0),12-64(a0)
  73.  move.w GraphicRoom(a0),GraphicRoom-64(a0)
  74. .nocopyin:
  75.  
  76.  movem.l d0-d7/a0-a6,-(a7)
  77.  move.w PLR1_xoff,newx
  78.  move.w PLR1_zoff,newz
  79.  move.w (a0),d1
  80.  move.l ObjectPoints,a1
  81.  lea (a1,d1.w*8),a1
  82.  move.w (a1),oldx
  83.  move.w 4(a1),oldz
  84.  move.w #-20,Range
  85.  move.w #20,speed
  86.  jsr HeadTowardsAng
  87.  move.w AngRet,d0
  88.  add.w ANIMFACING,d0
  89.  move.w d0,Facing(a0)
  90.  movem.l (a7)+,d0-d7/a0-a6
  91.  
  92.  rts
  93.  
  94. DODIE:
  95.  jsr WALKANIM
  96.  bsr GETROOMSTATSSTILL
  97.  tst.b FINISHEDANIM
  98.  beq.s stilldying
  99.  move.w #-1,12(a0)
  100.  move.w #-1,GraphicRoom(a0)
  101.  move.b #0,16(a0)
  102.  clr.b worry(a0)
  103.  st getout
  104. stilldying:
  105.  tst.w 12-64(a0)
  106.  blt.s .nocopyin
  107.  move.w 12(a0),12-64(a0)
  108.  move.w GraphicRoom(a0),GraphicRoom-64(a0)
  109. .nocopyin:
  110.  
  111.  
  112.  rts
  113.  
  114. TAKEDAMAGE:
  115.  
  116.  clr.b getout
  117.  moveq #0,d0
  118.  move.b damagetaken(a0),d0
  119.  move.l DAMAGEPTR,a2
  120.  add.w d0,(a2)
  121.  move.w (a2),d0
  122.  
  123.  asr.w #2,d0    ; divide by 4
  124.  
  125.  moveq #0,d1
  126.  move.b numlives(a0),d1
  127.  
  128.  move.b #0,damagetaken(a0)
  129.  cmp.w d0,d1
  130.  ble JUSTDIED
  131.  move.w #0,ObjTimer(a0)
  132.  move.w #0,SecTimer(a0)
  133.  
  134.  jsr GetRand
  135.  and.w #3,d0
  136.  beq.s .dodododo
  137.  
  138.  move.l WORKPTR,a5
  139.  st 1(a5)
  140.  
  141.  move.b #1,currentmode(a0)
  142.  move.w #0,SecTimer(a0)
  143.  move.w #0,ObjTimer(a0)
  144.  move.b #1,WhichAnim(a0)
  145.  
  146.  move.w (a0),d0
  147.  move.l ObjectPoints,a1
  148.  move.w (a1,d0.w*8),oldx
  149.  move.w 4(a1,d0.w*8),oldz
  150.  move.w PLR1_xoff,newx
  151.  move.w PLR1_zoff,newz
  152.  
  153.  move.w #100,speed
  154.  move.w #-20,Range
  155.  jsr HeadTowardsAng
  156.  move.w AngRet,Facing(a0)
  157.  
  158.  st getout
  159.  
  160.  rts
  161. .dodododo
  162.  
  163. ; asr.w #2,d2
  164. ; cmp.w d0,d2
  165. ; bgt.s .nostop
  166.  
  167.  move.b #4,currentmode(a0)    ; do take damage.
  168.  move.b #2,WhichAnim(a0)    ; get hit anim.
  169.  move.l WORKPTR,a5
  170.  st 1(a5)
  171.  
  172.  st getout
  173.  rts
  174. .nostop:
  175.  rts 
  176.  
  177. getout: dc.w 0
  178.  
  179. JUSTDIED:
  180.  
  181.  move.b #0,numlives(a0)
  182.  
  183.  move.w TextToShow(a0),d0
  184.  blt.s .notext
  185.  
  186.  muls #160,d0
  187.  add.l LEVELDATA,d0
  188.  move.w #0,SCROLLXPOS
  189.  move.l d0,SCROLLPOINTER
  190.  add.l #160,d0
  191.  move.l d0,ENDSCROLL
  192.  move.w #40,SCROLLTIMER
  193.  
  194. .notext:
  195.  
  196.  
  197.  move.l ObjectPoints,a2
  198.  move.w (a0),d3
  199.  move.w (a2,d3.w*8),newx
  200.  move.w 4(a2,d3.w*8),newz
  201.  
  202.  moveq #0,d0
  203.  move.b TypeOfThing(a0),d0
  204.  muls #AlienStatLen,d0
  205.  move.l LINKFILE,a2
  206.  lea AlienStats(a2),a2
  207.  add.l d0,a2
  208.  
  209.  move.b A_TypeOfSplat+1(a2),d0
  210.  move.b d0,TypeOfSplat
  211.  cmp.b #20,d0
  212.  blt gosplutch
  213.  
  214.  sub.b #20,TypeOfSplat
  215.  sub.b #20,d0
  216.  ext.w d0
  217.  
  218.  move.l LINKFILE,a2
  219.  add.l #AlienStats,a2
  220.  muls #AlienStatLen,d0
  221.  add.l d0,a2
  222.  move.l a2,a4
  223.  
  224. * Spawn some smaller aliens...
  225.  
  226.  move.w #3,d7    ; number to do.
  227.  
  228.  move.l OtherNastyData,a2
  229.  add.l #64,a2
  230.  
  231.  move.l ObjectPoints,a1
  232.  move.w (a0),d1
  233.  move.l (a1,d1.w*8),d0
  234.  move.l 4(a1,d1.w*8),d1
  235.  move.w #9,d3
  236.  
  237. spawny:
  238.  
  239. .findonefree
  240.  move.w 12(a2),d2
  241.  blt.s .foundonefree
  242.  tst.b numlives(a2)
  243.  beq.s .foundonefree
  244.  
  245.  adda.w #128,a2
  246.  dbra d3,.findonefree
  247.  bra .cantshoot
  248.  
  249. .foundonefree
  250.  
  251.  move.b TypeOfSplat,TypeOfThing(a2)
  252.  move.b #0,16(a2)
  253.  move.w (a2),d4
  254.  move.l d0,(a1,d4.w*8)
  255.  move.l d1,4(a1,d4.w*8)
  256.  move.w 4(a0),4(a2)
  257.  move.w 12(a0),12(a2)
  258.  move.w CurrCPt(a0),CurrCPt(a2)
  259.  move.w CurrCPt(a0),TargCPt(a2)
  260.  move.b #0,currentmode(a2)
  261.  move.b #0,WhichAnim(a2)
  262.  move.w #0,SecTimer(a2)
  263.  move.b #0,damagetaken(a2)
  264.  move.b A_HitPoints+1(a4),18(a2)
  265.  
  266.  dbra d7,spawny
  267. .cantshoot
  268.  
  269.  bra spawned
  270.  
  271. gosplutch:
  272.  
  273.  move.w #8,d2
  274.  jsr ExplodeIntoBits
  275.  
  276. spawned:
  277.  move.b #5,currentmode(a0)
  278.  move.b #3,WhichAnim(a0)
  279.  move.w #0,SecTimer(a0)
  280.  move.l WORKPTR,a5
  281.  st 1(a5)
  282.  st getout
  283.  rts
  284.  
  285. DORETREAT
  286.  
  287.  rts
  288.  
  289. DODEFAULT:
  290.  
  291.  cmp.w #1,DEFAULTMODE
  292.  blt PROWLRANDOM
  293.  beq PROWLRANDOMFLYING
  294.  
  295.  rts
  296.  
  297. DORESPONSE:
  298.  
  299.  cmp.w #1,RESPONSEMODE
  300.  blt CHARGE
  301.  beq CHARGETOSIDE
  302.  
  303.  cmp.w #3,RESPONSEMODE
  304.  blt ATTACKWITHGUN
  305.  beq CHARGEFLYING
  306.  
  307.  cmp.w #5,RESPONSEMODE
  308.  blt CHARGETOSIDEFLYING
  309.  beq ATTACKWITHGUNFLYING
  310.  
  311.  rts
  312.  
  313. DOFOLLOWUP:
  314.  cmp.w #1,FOLLOWUPMODE
  315.  blt PAUSEBRIEFLY
  316.  beq APPROACH
  317.  
  318.  cmp.w #3,FOLLOWUPMODE
  319.  blt APPROACHTOSIDE
  320.  beq APPROACHFLYING
  321.  
  322.  cmp.w #5,FOLLOWUPMODE
  323.  blt APPROACHTOSIDEFLYING
  324.  
  325.  rts
  326.  
  327. ***************************************************
  328. *** DEFAULT MOVEMENTS *****************************
  329. ***************************************************
  330.  
  331. ; Need a FLYING prowl routine
  332.  
  333. FLYABIT: dc.w 0
  334.  
  335. PROWLRANDOMFLYING:
  336.  
  337.  move.l #1000*256,StepDownVal
  338.  
  339.  st FLYABIT
  340.  bra PROWLFLY
  341.  
  342. PROWLRANDOM:
  343.  
  344.  clr.b FLYABIT
  345.  move.l #30*256,StepDownVal
  346.  
  347. PROWLFLY:
  348.  
  349.  move.l #20*256,StepUpVal
  350.  
  351.  tst.b damagetaken(a0)
  352.  beq.s .nodamage
  353.  
  354.  bsr TAKEDAMAGE
  355.  tst.b getout
  356.  beq.s .nodamage
  357.  rts
  358.  
  359. .nodamage:
  360.  
  361.  jsr WALKANIM
  362.  
  363.  
  364.  tst.w PLAYERONENOISEVOL
  365.  beq.s .noplayernoise
  366.  
  367.  move.l PLR1_Roompt,a1
  368.  tst.b PLR1_StoodInTop
  369.  beq.s .pnotintop
  370.  
  371.  addq #1,a1
  372.  
  373. .pnotintop:
  374.  
  375.  moveq #0,d1
  376.  move.b ToZoneCpt(a1),d1
  377.  
  378.  move.w CurrCPt(a0),d0
  379.  jsr GetNextCPt
  380.  
  381.  cmp.b #$7f,d0
  382.  bne.s .okaway
  383.  move.w CurrCPt(a0),d0
  384. .okaway
  385.  
  386.  move.w d0,TargCPt(a0)
  387.  
  388. .noplayernoise:
  389.  
  390.  moveq #0,d0
  391.  move.b teamnumber(a0),d0
  392.  blt.s .noteam
  393.  
  394.  lea TEAMWORK(pc),a2
  395.  asl.w #4,d0
  396.  add.w d0,a2
  397.  tst.w SEENBY(a2)
  398.  blt.s .noteam
  399.  move.w (a0),d0
  400.  cmp.w SEENBY(a2),d0
  401.  bne.s .noremove
  402.  move.w #-1,SEENBY(a2)
  403.  bra.s .noteam
  404. .noremove:
  405.  
  406.  asl.w #4,d0
  407.  lea NASTYWORK(pc),a1
  408.  add.w d0,a1
  409.  move.w #0,DAMAGEDONE(a1)
  410.  move.w #0,DAMAGETAKEN(a1)
  411.  move.l (a2),(a1)
  412.  move.l 4(a2),4(a1)
  413.  move.l 8(a2),8(a1)
  414.  move.l 12(a2),12(a1)
  415.  move.w lastcpt(a1),TargCPt(a0)
  416.  move.w #-1,lastzone(a1)
  417.  bra.s .notseen
  418.  
  419. .noteam:
  420.  
  421.  move.w (a0),d0
  422.  asl.w #4,d0
  423.  lea NASTYWORK(pc),a1
  424.  add.w d0,a1
  425.  move.w #0,DAMAGEDONE(a1)
  426.  move.w #0,DAMAGETAKEN(a1)
  427.  tst.w lastzone(a1)
  428.  blt.s .notseen
  429.  move.w lastcpt(a1),TargCPt(a0)
  430.  move.w #-1,lastzone(a1)
  431. .notseen:
  432.  
  433.  
  434.  move.w CurrCPt(a0),d0    ; where the alien is now.
  435.  move.w TargCPt(a0),d1
  436.  jsr GetNextCPt
  437.  cmp.b #$7f,d0
  438.  beq.s .yesrand
  439.  tst.b FLYABIT
  440.  bne.s .norand
  441.  tst.b ONLYSEE
  442.  beq.s .norand
  443. .yesrand
  444.  jsr GetRand
  445.  moveq #0,d1
  446.  move.w d0,d1
  447.  divs.w NumCPts,d1
  448.  swap d1
  449.  move.w #7,d7
  450.  
  451. .tryagain:
  452.  move.w d1,TargCPt(a0)
  453.  move.w CurrCPt(a0),d0
  454.  jsr GetNextCPt
  455.  cmp.w CurrCPt(a0),d0
  456.  beq.s .plusagain
  457.  cmp.b #$7f,d0
  458.  bne.s .okaway2
  459. .plusagain:
  460.  move.w TargCPt(a0),d1
  461.  add.w #1,d1
  462.  cmp.w NumCPts,d1
  463.  blt .nobin
  464.  moveq #0,d1
  465. .nobin
  466.  dbra d7,.tryagain
  467. .okaway2
  468.  
  469.  
  470. .norand: 
  471.  
  472.  
  473.  move.w d0,MIDDLECPT
  474.  
  475.  move.l CPtPos,a1
  476.  move.w (a1,d0.w*8),newx
  477.  move.w 2(a1,d0.w*8),newz
  478.  
  479.  asl.w #2,d0
  480.  add.w (a0),d0
  481.  muls #$1347,d0
  482.  and.w #4095,d0
  483.  move.l #SineTable,a1
  484.  move.w (a1,d0.w*2),d1
  485.  move.l #SineTable+2048,a1
  486.  move.w (a1,d0.w*2),d2
  487.  ext.l d1
  488.  ext.l d2
  489.  asl.l #4,d2
  490.  swap d2
  491.  asl.l #4,d1
  492.  swap d1
  493.  add.w d1,newx
  494.  add.w d2,newz
  495.  
  496.  move.w (a0),d1
  497.  move.l #ObjRotated,a6
  498.  move.l ObjectPoints,a1
  499.  lea (a1,d1.w*8),a1
  500.  lea (a6,d1.w*8),a6
  501.  move.w (a1),oldx
  502.  move.w 4(a1),oldz
  503.  move.w #0,speed
  504.  tst.b DoAction
  505.  beq.s .nospeed
  506.  moveq #0,d2
  507.  move.b DoAction,d2
  508.  asl.w #2,d2
  509.  
  510.  muls.w prowlspeed,d2
  511.  move.w d2,speed
  512. .nospeed:
  513.  move.w #40,Range
  514.  move.w 4(a0),d0
  515.  ext.l d0
  516.  asl.l #7,d0
  517.  move.l thingheight,d2
  518.  asr.l #1,d2
  519.  sub.l d2,d0
  520.  move.l d0,newy
  521.  move.l d0,oldy
  522.  
  523.  move.b ObjInTop(a0),StoodInTop
  524.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  525.  clr.b canshove
  526.  clr.b GotThere
  527.  jsr HeadTowardsAng
  528.  move.w AngRet,Facing(a0)
  529.  
  530. ; add.w #100,Facing(a0)
  531. ; and.w #8190,Facing(a0)
  532.  
  533.  tst.b GotThere
  534.  beq.s .notnextcpt
  535.  
  536.  move.w MIDDLECPT,d0
  537.  move.w d0,CurrCPt(a0)
  538.  cmp.w TargCPt(a0),d0
  539.  bne .notnextcpt
  540.  
  541. * We have arrived at the target contol pt. Pick a
  542. * random one and go to that...
  543.  
  544.  jsr GetRand
  545.  moveq #0,d1
  546.  move.w d0,d1
  547.  divs.w NumCPts,d1
  548.  swap d1
  549.  move.w d1,TargCPt(a0)
  550.  
  551. .notnextcpt:
  552.  
  553.  move.w #%1000000000,wallflags
  554.  move.l #%00001000110010000010,CollideFlags
  555.  jsr Collision
  556.  tst.b hitwall
  557.  beq.s .canmove
  558.  
  559.  move.w oldx,newx
  560.  move.w oldz,newz
  561.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  562.  bra .hitathing
  563.  
  564. .canmove:
  565.  
  566.  clr.b wallbounce
  567.  Jsr MoveObject
  568.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  569.  move.b StoodInTop,ObjInTop(a0)
  570.  
  571.  
  572. .hitathing:
  573.  tst.w 12-64(a0)
  574.  blt.s .nocopyin
  575.  move.w 12(a0),12-64(a0)
  576.  move.w GraphicRoom(a0),GraphicRoom-64(a0)
  577. .nocopyin:
  578.  
  579.  move.w 4(a0),-(a7)
  580.  bsr GETROOMSTATS
  581.  move.w (a7)+,d0
  582.  
  583.  tst.b FLYABIT
  584.  beq.s .noflymove
  585.  move.w d0,4(a0)
  586.  bsr FLYTOCPTHEIGHT
  587. .noflymove:
  588.  
  589.  bsr DOTORCH
  590.  
  591.  move.b #0,currentmode(a0)
  592.  bsr LOOKFORPLAYER1
  593.  move.b #0,WhichAnim(a0)
  594.  tst.b 17(a0)
  595.  beq.s .nosee
  596.  bsr CHECKINFRONT
  597.  tst.b d0
  598.  beq.s .nosee
  599.  
  600.  move.w TempFrames,d0
  601.  sub.w d0,ObjTimer(a0)
  602.  bgt.s .notreacted
  603.  bsr CHECKFORDARK
  604.  tst.b d0
  605.  beq.s .nosee
  606.  
  607. ; We have seen the player and reacted; can we attack him?
  608.  
  609.  tst.b FLYABIT
  610.  bne.s .yesattack
  611.  
  612.  cmp.w #2,RESPONSEMODE
  613.  beq.s .yesattack
  614.  cmp.w #5,RESPONSEMODE
  615.  beq.s .yesattack
  616.  
  617.  bsr CHECKATTACKONGROUND
  618.  tst.b d0
  619.  bne.s .yesattack
  620.  
  621. ; We can see the player
  622.  
  623.  bsr STOREPLAYERPOS
  624.  
  625. ; but we can't get to him
  626.  bra.s .nosee
  627.  
  628. .yesattack:
  629.  move.w #0,SecTimer(a0)
  630.  move.b #1,currentmode(a0)
  631.  move.b #1,WhichAnim(a0)
  632. .notreacted:
  633.  move.w ANIMFACING,d0
  634.  add.w d0,Facing(a0)
  635.  rts
  636. .nosee:
  637.  move.w REACTIONTIME,ObjTimer(a0)
  638.  
  639.  move.w ANIMFACING,d0
  640.  add.w d0,Facing(a0)
  641.  
  642.  rts
  643.  
  644. ***********************************************
  645. ** RESPONSE MOVEMENTS *************************
  646. ***********************************************
  647.  
  648. CHARGETOSIDE:
  649.  clr.b FLYABIT
  650.  st TOSIDE
  651.  move.l #30*256,StepDownVal
  652.  bra INTOCHA
  653.  
  654. CHARGE:
  655.  clr.b FLYABIT
  656.  clr.b TOSIDE
  657.  move.l #30*256,StepDownVal
  658.  
  659. INTOCHA:
  660.  
  661.  tst.b damagetaken(a0)
  662.  beq.s .nodamage
  663.  
  664.  bsr TAKEDAMAGE
  665.  tst.b getout
  666.  beq.s .nodamage
  667.  rts
  668.  
  669. .nodamage:
  670.  
  671.  jsr ATTACKANIM
  672. ; tst.b FINISHEDANIM
  673. ; beq.s .notfinishedattacking
  674. ; move.b #2,currentmode(a0)
  675. ; move.w FOLLOWUPTIMER,ObjTimer(a0)
  676. ; move.w #0,SecTimer(a0)
  677. ; rts
  678. ;.notfinishedattacking:
  679.  
  680.  move.w 12(a0),FromZone
  681.  jsr CheckTeleport
  682.  tst.b OKTEL
  683.  beq.s .notel
  684.  move.l floortemp,d0
  685.  asr.l #7,d0
  686.  add.w d0,4(a0)
  687.  bra .NoMunch
  688. .notel:
  689.  
  690.  move.w PLR1_xoff,newx
  691.  move.w PLR1_zoff,newz
  692.  move.w PLR1_sinval,tempsin
  693.  move.w PLR1_cosval,tempcos
  694.  move.w p1_xoff,tempx
  695.  move.w p1_zoff,tempz
  696.  tst.b TOSIDE
  697.  beq.s .noside
  698.  jsr RunAround
  699. .noside:
  700.  
  701.  
  702.  move.w (a0),d1
  703.  move.l #ObjRotated,a6
  704.  move.l ObjectPoints,a1
  705.  lea (a1,d1.w*8),a1
  706.  lea (a6,d1.w*8),a6
  707.  move.w (a1),oldx
  708.  move.w 4(a1),oldz
  709.  move.w responsespeed,d2
  710.  muls.w TempFrames,d2
  711.  move.w d2,speed
  712.  move.w #160,Range
  713.  move.w 4(a0),d0
  714.  ext.l d0
  715.  asl.l #7,d0
  716.  move.l thingheight,d2
  717.  asr.l #1,d2
  718.  sub.l d2,d0
  719.  move.l d0,newy
  720.  move.l d0,oldy
  721.  
  722.  move.b ObjInTop(a0),StoodInTop
  723.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  724.  clr.b canshove
  725.  clr.b GotThere
  726.  jsr HeadTowardsAng
  727.  move.w #%1000000000,wallflags
  728.  
  729.  move.l #%100000,CollideFlags
  730.  jsr Collision
  731.  tst.b hitwall
  732.  beq.s .nothitplayer
  733.  
  734.  move.w oldx,newx
  735.  move.w oldz,newz
  736.  st GotThere
  737.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  738.  bra .hitathing
  739.  
  740. .nothitplayer:
  741.  
  742.  move.l #%11111111110111000010,CollideFlags
  743.  jsr Collision
  744.  tst.b hitwall
  745.  beq.s .canmove
  746.  
  747.  move.w oldx,newx
  748.  move.w oldz,newz
  749.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  750.  bra .hitathing
  751.  
  752. .canmove:
  753.  
  754.  clr.b wallbounce
  755.  Jsr MoveObject
  756.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  757.  move.b StoodInTop,ObjInTop(a0)
  758.  
  759.  move.w AngRet,Facing(a0)
  760.  
  761. .hitathing:
  762.  tst.w 12-64(a0)
  763.  blt.s .nocopyin
  764.  move.w 12(a0),12-64(a0)
  765.  move.w GraphicRoom(a0),GraphicRoom-64(a0)
  766. .nocopyin:
  767.  
  768.  tst.b GotThere 
  769.  beq.s .NoMunch
  770.  tst.b DoAction
  771.  beq.s .NoMunch
  772.  move.l PLR1_Obj,a5
  773.  move.b DoAction,d0
  774.  asl.w #1,d0
  775.  add.b d0,damagetaken(a5)
  776.  
  777.  move.w newx,d0
  778.  sub.w oldx,d0
  779.  ext.l d0
  780.  divs TempFrames,d0
  781.  add.w d0,ImpactX(a5)
  782.  move.w newz,d0
  783.  sub.w oldz,d0
  784.  ext.l d0
  785.  divs TempFrames,d0
  786.  add.w d0,ImpactZ(a5)
  787.  
  788. .NoMunch: 
  789.  
  790.  bsr STOREPLAYERPOS
  791.  
  792.  bsr GETROOMSTATS
  793.  
  794.  bsr GETROOMCPT 
  795.  
  796.  bsr DOTORCH
  797.  
  798.  bsr LOOKFORPLAYER1
  799.  move.b #0,currentmode(a0)
  800.  tst.b 17(a0)
  801.  beq.s .nosee
  802.  bsr CHECKINFRONT
  803.  tst.b d0
  804.  beq.s .nosee
  805.  tst.b FLYABIT
  806.  bne.s .yesattack
  807.  
  808.  bsr CHECKATTACKONGROUND
  809.  tst.b d0
  810.  bne.s .yesattack
  811.  
  812.  bra.s .nosee
  813.  
  814. .yesattack
  815.  move.w ANIMFACING,d0
  816.  add.w d0,Facing(a0)
  817.  move.b #1,currentmode(a0)
  818.  move.b #1,WhichAnim(a0)
  819.  rts
  820. .nosee:
  821.  move.b #0,WhichAnim(a0)
  822.  move.w #0,SecTimer(a0)
  823.  move.w ANIMFACING,d0
  824.  add.w d0,Facing(a0)
  825.  rts
  826.  
  827.  
  828. ATTACKWITHGUNFLYING
  829.  st FLYABIT
  830.  bra intoatt
  831.  
  832. ATTACKWITHGUN:
  833.  clr.b FLYABIT
  834. intoatt:
  835.  
  836.  
  837.  
  838.  move.l LINKFILE,a1
  839.  lea AlienStats(a1),a1
  840.  moveq #0,d0
  841.  move.b TypeOfThing(a0),d0
  842.  muls #AlienStatLen,d0
  843.  add.w d0,a1
  844.  move.w A_BulletType(a1),d0
  845.  move.b d0,SHOTTYPE 
  846.  
  847.  move.l LINKFILE,a1
  848.  lea BulletAnimData(a1),a1
  849.  muls #B_BulStatLen,d0
  850.  add.l d0,a1
  851.  
  852.  move.l B_DamageToTarget(a1),d0
  853.  move.b d0,SHOTPOWER
  854.  clr.l d1
  855.  move.l B_MovementSpeed(a1),d0
  856.  bset d0,d1
  857.  move.w d1,SHOTSPEED
  858.  sub.w #1,d0
  859.  move.w d0,SHOTSHIFT
  860.  
  861.  move.w #0,SHOTOFFMULT
  862.  move.l #0,SHOTYOFF
  863.  
  864.  tst.l B_VisibleOrInstant(a1)
  865.  beq ATTACKWITHBULLETGUN
  866.  
  867. ATTACKWITHINSTANTGUN:
  868.  
  869.  tst.b damagetaken(a0)
  870.  beq.s .nodamage
  871.  
  872.  move.b #4,currentmode(a0)
  873.  bsr TAKEDAMAGE
  874.  tst.b getout
  875.  beq.s .nodamage
  876. ; move.w ANIMFACING,d0
  877. ; add.w d0,Facing(a0)
  878.  rts
  879.  
  880. .nodamage:
  881.  
  882.  jsr ATTACKANIM
  883.  
  884.  movem.l d0-d7/a0-a6,-(a7)
  885.  move.w PLR1_xoff,newx
  886.  move.w PLR1_zoff,newz
  887.  move.w (a0),d1
  888.  move.l ObjectPoints,a1
  889.  lea (a1,d1.w*8),a1
  890.  move.w (a1),oldx
  891.  move.w 4(a1),oldz
  892.  move.w #-20,Range
  893.  move.w #20,speed
  894.  jsr HeadTowardsAng
  895.  move.w AngRet,Facing(a0)
  896.  movem.l (a7)+,d0-d7/a0-a6
  897.  
  898.  
  899.  bsr STOREPLAYERPOS
  900.  
  901.  tst.b DoAction
  902.  beq .noshootythang
  903.  
  904.  move.w (a0),d1
  905.  move.l #ObjRotated,a6
  906.  move.l ObjectPoints,a1
  907.  lea (a1,d1.w*8),a1
  908.  lea (a6,d1.w*8),a6
  909.  
  910.  movem.l a0/a1,-(a7)
  911.  jsr GetRand
  912.  
  913.  move.l #ObjRotated,a6
  914.  move.w (a0),d1
  915.  lea (a6,d1.w*8),a6
  916.  
  917. ; move.l (a6),Noisex
  918. ; move.w #200,Noisevol
  919. ; move.w #3,Samplenum
  920. ; move.b #1,chanpick
  921. ; clr.b notifplaying
  922. ; movem.l d0-d7/a0-a6,-(a7)
  923. ; move.b 1(a0),IDNUM
  924. ; jsr MakeSomeNoise
  925. ; movem.l (a7)+,d0-d7/a0-a6
  926.  
  927.  and.w #$7fff,d0
  928.  move.w (a6),d1
  929.  muls d1,d1
  930.  move.w 2(a6),d2
  931.  muls d2,d2
  932.  add.l d2,d1
  933.  asr.l #6,d1
  934.  ext.l d0
  935.  asl.l #2,d0
  936.  cmp.l d1,d0
  937.  bgt.s .hitplr
  938.  jsr SHOOTPLAYER1
  939.  bra.s .missplr
  940. .hitplr: 
  941.  move.l PLR1_Obj,a1
  942.  move.b SHOTPOWER,d0
  943.  add.b d0,damagetaken(a1)
  944.  
  945.  sub.l #ObjRotated,a6
  946.  add.l ObjectPoints,a6
  947.  move.w (a6),d0
  948.  sub.w p1_xoff,d0    ;dx
  949.  move.w 4(a6),d1
  950.  sub.w p1_zoff,d1    ;dz
  951.  
  952.  move.w d0,d2
  953.  move.w d1,d3
  954.  muls d2,d2
  955.  muls d3,d3
  956.  add.l d3,d2
  957.  jsr CALCSQROOT
  958.  add.l d2,d2
  959.  
  960.  moveq #0,d3
  961.  move.b SHOTPOWER,d3
  962.  
  963.  
  964.  muls d3,d0
  965.  divs d2,d0
  966.  muls d3,d1
  967.  divs d2,d1
  968.  
  969.  sub.w d0,ImpactX(a1)
  970.  sub.w d1,ImpactZ(a1)
  971.  
  972. .missplr:
  973.  movem.l (a7)+,a0/a1
  974.  
  975.  
  976. .noshootythang:
  977.  
  978.  move.w (a0),d1
  979.  move.l ObjectPoints,a1
  980.  lea (a1,d1.w*8),a1
  981.  
  982.  move.w (a1),newx
  983.  move.w 4(a1),newz
  984.  
  985.  bsr DOTORCH
  986.  
  987.  tst.b FINISHEDANIM
  988.  beq.s .notfinishedattacking
  989.  move.b #0,WhichAnim(a0)
  990.  move.b #2,currentmode(a0)
  991.  move.w FOLLOWUPTIMER,ObjTimer(a0)
  992.  move.w #0,SecTimer(a0)
  993.  move.w ANIMFACING,d0
  994.  add.w d0,Facing(a0)
  995.  rts
  996. .notfinishedattacking:
  997.  
  998.  bsr LOOKFORPLAYER1
  999.  move.b #0,currentmode(a0)
  1000.  tst.b 17(a0)
  1001.  beq.s .nosee
  1002.  bsr CHECKINFRONT
  1003.  tst.b d0
  1004.  beq.s .nosee
  1005.  
  1006.  move.b #1,currentmode(a0)
  1007.  move.b #1,WhichAnim(a0)
  1008.  move.w ANIMFACING,d0
  1009.  add.w d0,Facing(a0)
  1010.  rts
  1011. .nosee:
  1012.  move.b #0,WhichAnim(a0)
  1013.  move.w #0,SecTimer(a0)
  1014.  move.w FOLLOWUPTIMER,ObjTimer(a0)
  1015.  move.w #0,SecTimer(a0)
  1016.  move.w ANIMFACING,d0
  1017.  add.w d0,Facing(a0)
  1018.  rts
  1019.  
  1020. ATTACKWITHBULLETGUN:
  1021.  
  1022.  tst.b damagetaken(a0)
  1023.  beq.s .nodamage
  1024.  
  1025.  move.b #4,currentmode(a0)
  1026.  bsr TAKEDAMAGE
  1027.  tst.b getout
  1028.  beq.s .nodamage
  1029. ; move.w ANIMFACING,d0
  1030. ; add.w d0,Facing(a0)
  1031.  rts
  1032.  
  1033. .nodamage:
  1034.  
  1035.  
  1036.  jsr ATTACKANIM
  1037.  
  1038.  movem.l d0-d7/a0-a6,-(a7)
  1039.  move.w PLR1_xoff,newx
  1040.  move.w PLR1_zoff,newz
  1041.  move.w (a0),d1
  1042.  move.l ObjectPoints,a1
  1043.  lea (a1,d1.w*8),a1
  1044.  move.w (a1),oldx
  1045.  move.w 4(a1),oldz
  1046.  move.w #-20,Range
  1047.  move.w #20,speed
  1048.  jsr HeadTowardsAng
  1049.  move.w AngRet,Facing(a0)
  1050.  movem.l (a7)+,d0-d7/a0-a6
  1051.  
  1052.  bsr STOREPLAYERPOS
  1053.  
  1054.  tst.b DoAction
  1055.  beq.s .noshootythang
  1056.   
  1057.  movem.l d0-d7/a0-a6,-(a7)
  1058.   
  1059.  move.w (a0),d1
  1060.  move.l ObjectPoints,a1
  1061.  lea (a1,d1.w*8),a1
  1062.  
  1063.  move.b ObjInTop(a0),SHOTINTOP
  1064.  
  1065.  jsr FireAtPlayer1
  1066.  movem.l (a7)+,d0-d7/a0-a6  
  1067. .noshootythang:
  1068.  
  1069.  move.w (a0),d1
  1070.  move.l ObjectPoints,a1
  1071.  lea (a1,d1.w*8),a1
  1072.  
  1073.  move.w (a1),newx
  1074.  move.w 4(a1),newz
  1075.  
  1076.  bsr DOTORCH
  1077.  
  1078.  
  1079.  tst.b FINISHEDANIM
  1080.  beq.s .notfinishedattacking
  1081.  move.b #0,WhichAnim(a0)
  1082.  move.b #2,currentmode(a0)
  1083.  move.w FOLLOWUPTIMER,ObjTimer(a0)
  1084.  move.w #0,SecTimer(a0)
  1085.  move.w ANIMFACING,d0
  1086.  add.w d0,Facing(a0)
  1087.  rts
  1088. .notfinishedattacking:
  1089.  
  1090.  bsr LOOKFORPLAYER1
  1091.  move.b #0,currentmode(a0)
  1092.  tst.b 17(a0)
  1093.  beq.s .nosee
  1094.  bsr CHECKINFRONT
  1095.  tst.b d0
  1096.  beq.s .nosee
  1097.  move.b #1,WhichAnim(a0)
  1098.  move.b #1,currentmode(a0)
  1099.  move.w ANIMFACING,d0
  1100.  add.w d0,Facing(a0)
  1101.  rts
  1102. .nosee:
  1103.  move.b #0,WhichAnim(a0)
  1104.  move.w #0,SecTimer(a0)
  1105.  move.w FOLLOWUPTIMER,ObjTimer(a0)
  1106.  move.w #0,SecTimer(a0)
  1107.  move.w ANIMFACING,d0
  1108.  add.w d0,Facing(a0)
  1109.  rts
  1110.  
  1111. CHARGETOSIDEFLYING:
  1112.  st FLYABIT
  1113.  st TOSIDE
  1114.  move.l #1000*256,StepDownVal
  1115.  bra INTOCHAFLY
  1116.  
  1117. CHARGEFLYING: 
  1118.  clr.b TOSIDE
  1119.  st FLYABIT
  1120.  
  1121.  move.l #1000*256,StepDownVal
  1122.  
  1123. INTOCHAFLY:
  1124.  
  1125.  tst.b damagetaken(a0)
  1126.  beq.s .nodamage
  1127.  
  1128.  bsr TAKEDAMAGE
  1129.  tst.b getout
  1130.  beq.s .nodamage
  1131. ; move.w ANIMFACING,d0
  1132. ; add.w d0,Facing(a0)
  1133.  rts
  1134.  
  1135. .nodamage:
  1136.  
  1137.  
  1138.  jsr ATTACKANIM
  1139. ; tst.b FINISHEDANIM
  1140. ; beq.s .notfinishedattacking
  1141. ; move.b #2,currentmode(a0)
  1142. ; move.w FOLLOWUPTIMER,ObjTimer(a0)
  1143. ; move.w #0,SecTimer(a0)
  1144. ; rts
  1145. ;.notfinishedattacking:
  1146.  
  1147.  move.w 12(a0),FromZone
  1148.  jsr CheckTeleport
  1149.  tst.b OKTEL
  1150.  beq.s .notel
  1151.  move.l floortemp,d0
  1152.  asr.l #7,d0
  1153.  add.w d0,4(a0)
  1154.  bra .NoMunch
  1155. .notel:
  1156.  
  1157.  move.w (a0),d1
  1158.  move.l #ObjRotated,a6
  1159.  move.l ObjectPoints,a1
  1160.  lea (a1,d1.w*8),a1
  1161.  lea (a6,d1.w*8),a6
  1162.  move.w (a1),oldx
  1163.  move.w 4(a1),oldz
  1164.  move.w PLR1_xoff,newx
  1165.  move.w PLR1_zoff,newz
  1166.  move.w PLR1_sinval,tempsin
  1167.  move.w PLR1_cosval,tempcos
  1168.  move.w p1_xoff,tempx
  1169.  move.w p1_zoff,tempz
  1170.  tst.b TOSIDE
  1171.  beq.s .noside
  1172.  jsr RunAround
  1173. .noside:
  1174.  
  1175.  move.w responsespeed,d2
  1176.  muls.w TempFrames,d2
  1177.  move.w d2,speed
  1178.  move.w #160,Range
  1179.  move.w 4(a0),d0
  1180.  ext.l d0
  1181.  asl.l #7,d0
  1182.  move.l thingheight,d2
  1183.  asr.l #1,d2
  1184.  sub.l d2,d0
  1185.  move.l d0,newy
  1186.  move.l d0,oldy
  1187.  
  1188.  move.b ObjInTop(a0),StoodInTop
  1189.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  1190.  clr.b canshove
  1191.  clr.b GotThere
  1192.  jsr HeadTowardsAng
  1193.  move.w #%1000000000,wallflags
  1194.  
  1195.  move.l #%100000,CollideFlags
  1196.  jsr Collision
  1197.  tst.b hitwall
  1198.  beq.s .nothitplayer
  1199.  
  1200.  move.w oldx,newx
  1201.  move.w oldz,newz
  1202.  st GotThere
  1203.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  1204.  bra .hitathing
  1205.  
  1206. .nothitplayer:
  1207.  
  1208.  move.l #%11111111110111000010,CollideFlags
  1209.  jsr Collision
  1210.  tst.b hitwall
  1211.  beq.s .canmove
  1212.  
  1213.  move.w oldx,newx
  1214.  move.w oldz,newz
  1215.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  1216.  bra .hitathing
  1217.  
  1218. .canmove:
  1219.  
  1220.  clr.b wallbounce
  1221.  Jsr MoveObject
  1222.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  1223.  move.b StoodInTop,ObjInTop(a0)
  1224.  
  1225.  move.w AngRet,Facing(a0)
  1226.  
  1227. .hitathing:
  1228.  
  1229.  tst.b GotThere 
  1230.  beq.s .NoMunch
  1231.  tst.b DoAction
  1232.  beq.s .NoMunch
  1233.  move.l PLR1_Obj,a5
  1234.  move.b DoAction,d0
  1235.  asl.w #1,d0
  1236.  add.b d0,damagetaken(a5)
  1237. .NoMunch: 
  1238.  
  1239.  bsr STOREPLAYERPOS
  1240.  
  1241.  move.w 4(a0),-(a7)
  1242.  bsr GETROOMSTATS
  1243.  move.w (a7)+,4(a0)
  1244.  
  1245.  bsr GETROOMCPT
  1246.  
  1247.  bsr FLYTOPLAYERHEIGHT
  1248.  
  1249.  bsr DOTORCH
  1250.  
  1251.  bsr LOOKFORPLAYER1
  1252.  move.b #0,currentmode(a0)
  1253.  tst.b 17(a0)
  1254.  beq.s .nosee
  1255.  bsr CHECKINFRONT
  1256.  tst.b d0
  1257.  beq.s .nosee
  1258.  move.b #1,currentmode(a0)
  1259.  move.b #1,WhichAnim(a0)
  1260.  move.w ANIMFACING,d0
  1261.  add.w d0,Facing(a0)
  1262.  rts
  1263. .nosee:
  1264.  move.b #0,WhichAnim(a0)
  1265.  move.w #0,SecTimer(a0)
  1266.  move.w ANIMFACING,d0
  1267.  add.w d0,Facing(a0)
  1268.  rts
  1269.  
  1270.  
  1271. ***********************************************
  1272. ** Retreat Movements **************************
  1273. ***********************************************
  1274.  
  1275. ***********************************************
  1276. ** Followup Movements *************************
  1277. ***********************************************
  1278.  
  1279. PAUSEBRIEFLY
  1280.  
  1281.  tst.b damagetaken(a0)
  1282.  beq.s .nodamage
  1283.  
  1284.  bsr TAKEDAMAGE
  1285.  tst.b getout
  1286.  beq.s .nodamage
  1287. ; move.w ANIMFACING,d0
  1288. ; add.w d0,Facing(a0)
  1289.  rts
  1290.  
  1291. .nodamage:
  1292.  
  1293.  move.w #0,SecTimer(a0)
  1294.  jsr WALKANIM
  1295.  
  1296.  move.w TempFrames,d0
  1297.  sub.w d0,ObjTimer(a0)
  1298.  bgt.s .stillwaiting
  1299.  
  1300.  move.w (a0),d1
  1301.  move.l ObjectPoints,a1
  1302.  lea (a1,d1.w*8),a1
  1303.  
  1304.  move.w (a1),newx
  1305.  move.w 4(a1),newz
  1306.  
  1307.  bsr DOTORCH
  1308.  
  1309.  bsr LOOKFORPLAYER1
  1310.  move.b #0,currentmode(a0)
  1311.  tst.b 17(a0)
  1312.  beq.s .nosee
  1313.  bsr CHECKINFRONT
  1314.  tst.b d0
  1315.  beq.s .nosee
  1316.  bsr CHECKFORDARK
  1317.  tst.b d0
  1318.  beq.s .nosee
  1319.  move.b #1,WhichAnim(a0)
  1320.  move.b #1,currentmode(a0)
  1321.  move.w ANIMFACING,d0
  1322.  add.w d0,Facing(a0)
  1323.  rts
  1324. .nosee:
  1325.  move.b #0,WhichAnim(a0)
  1326.  move.w ANIMFACING,d0
  1327.  add.w d0,Facing(a0)
  1328.  rts
  1329.  
  1330. .stillwaiting:
  1331.  move.w ANIMFACING,d0
  1332.  add.w d0,Facing(a0)
  1333.  rts
  1334.  
  1335. TOSIDE: dc.w 0
  1336.  
  1337. APPROACH:
  1338.  clr.b FLYABIT
  1339.  move.l #30*256,StepDownVal
  1340.  clr.b TOSIDE
  1341.  bra INTOAPP
  1342.  
  1343. APPROACHFLYING:
  1344.  st FLYABIT
  1345.  move.l #1000*256,StepDownVal
  1346.  clr.b TOSIDE
  1347.  bra INTOAPP
  1348.  
  1349. APPROACHTOSIDEFLYING:
  1350.  st FLYABIT
  1351.  move.l #1000*256,StepDownVal
  1352.  st TOSIDE
  1353.  bra INTOAPP
  1354.  
  1355. APPROACHTOSIDE:
  1356.  st TOSIDE
  1357.  clr.b FLYABIT
  1358.  move.l #30*256,StepDownVal
  1359.  
  1360. INTOAPP:
  1361.  
  1362.  tst.b damagetaken(a0)
  1363.  beq.s .nodamage
  1364.  
  1365.  bsr TAKEDAMAGE
  1366. ; tst.b getout
  1367. ; beq.s .nodamage
  1368.  rts
  1369.  
  1370. .nodamage:
  1371.  
  1372.  jsr WALKANIM
  1373.  
  1374.  move.w 12(a0),FromZone
  1375.  jsr CheckTeleport
  1376.  tst.b OKTEL
  1377.  beq.s .notel
  1378.  move.l floortemp,d0
  1379.  asr.l #7,d0
  1380.  add.w d0,4(a0)
  1381.  bra .NoMunch
  1382. .notel:
  1383.  
  1384.  move.w (a0),d1
  1385.  move.l #ObjRotated,a6
  1386.  move.l ObjectPoints,a1
  1387.  lea (a1,d1.w*8),a1
  1388.  lea (a6,d1.w*8),a6
  1389.  move.w (a1),oldx
  1390.  move.w 4(a1),oldz
  1391.  
  1392.  move.w PLR1_xoff,newx
  1393.  move.w PLR1_zoff,newz
  1394.  move.w PLR1_sinval,tempsin
  1395.  move.w PLR1_cosval,tempcos
  1396.  move.w p1_xoff,tempx
  1397.  move.w p1_zoff,tempz
  1398.  tst.b TOSIDE
  1399.  beq.s .noside
  1400.  jsr RunAround
  1401. .noside:
  1402.  
  1403.  move.w #0,speed
  1404.  tst.b DoAction
  1405.  beq.s .nospeed
  1406.  moveq #0,d2
  1407.  move.b DoAction,d2
  1408.  asl.w #2,d2
  1409.  muls.w followupspeed,d2
  1410.  move.w d2,speed
  1411. .nospeed:
  1412.  move.w #160,Range
  1413.  move.w 4(a0),d0
  1414.  ext.l d0
  1415.  asl.l #7,d0
  1416.  move.l thingheight,d2
  1417.  asr.l #1,d2
  1418.  sub.l d2,d0
  1419.  move.l d0,newy
  1420.  move.l d0,oldy
  1421.  
  1422.  move.b ObjInTop(a0),StoodInTop
  1423.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  1424.  clr.b canshove
  1425.  clr.b GotThere
  1426.  jsr HeadTowardsAng
  1427.  move.w #%1000000000,wallflags
  1428.  
  1429.  move.l #%100000,CollideFlags
  1430.  jsr Collision
  1431.  tst.b hitwall
  1432.  beq.s .nothitplayer
  1433.  
  1434.  move.w oldx,newx
  1435.  move.w oldz,newz
  1436.  st GotThere
  1437.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  1438.  bra .hitathing
  1439.  
  1440. .nothitplayer:
  1441.  
  1442.  move.l #%11111111110111000010,CollideFlags
  1443.  jsr Collision
  1444.  tst.b hitwall
  1445.  beq.s .canmove
  1446.  
  1447.  move.w oldx,newx
  1448.  move.w oldz,newz
  1449.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  1450.  bra .hitathing
  1451.  
  1452. .canmove:
  1453.  
  1454.  clr.b wallbounce
  1455.  Jsr MoveObject
  1456.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  1457.  move.b StoodInTop,ObjInTop(a0)
  1458.  
  1459.  move.w AngRet,Facing(a0)
  1460.  
  1461. .hitathing:
  1462.  
  1463.  tst.w 12-64(a0)
  1464.  blt.s .nocopyin
  1465.  move.w 12(a0),12-64(a0)
  1466.  move.w GraphicRoom(a0),GraphicRoom-64(a0)
  1467. .nocopyin:
  1468.  
  1469. ; tst.b GotThere 
  1470. ; beq.s .NoMunch
  1471. ; tst.w FourthTimer(a0)
  1472. ; ble.s .OKtomunch
  1473. ; move.w TempFrames,d0
  1474. ; sub.w d0,FourthTimer(a0)
  1475. ; bra.s .NoMunch
  1476. ;.OKtomunch:
  1477. ; move.w #40,FourthTimer(a0)
  1478. ; move.l PLR1_Obj,a5
  1479. ; add.b #2,damagetaken(a5)
  1480. .NoMunch: 
  1481.  
  1482.  bsr STOREPLAYERPOS
  1483.  
  1484.  tst.b FLYABIT
  1485.  beq.s .notfl
  1486.  
  1487.  bsr FLYTOPLAYERHEIGHT
  1488. .notfl:
  1489.  
  1490.  move.w 4(a0),-(a7)
  1491.  bsr GETROOMSTATS
  1492.  move.w (a7)+,d0
  1493.  tst.b FLYABIT
  1494.  beq.s .notflying
  1495.  move.w d0,4(a0)
  1496. .notflying:
  1497.  
  1498.  bsr GETROOMCPT
  1499.  
  1500.  bsr DOTORCH
  1501.  
  1502.  move.b #0,currentmode(a0)
  1503.  tst.b FLYABIT
  1504.  bne.s .inair
  1505.  bsr CHECKATTACKONGROUND
  1506.  tst.b d0
  1507.  beq .nosee
  1508. .inair:
  1509.  
  1510.  bsr LOOKFORPLAYER1
  1511.  tst.b 17(a0)
  1512.  beq.s .nosee
  1513.  bsr CHECKINFRONT
  1514.  tst.b d0
  1515.  beq.s .nosee
  1516.  move.b #2,currentmode(a0)
  1517.  move.w TempFrames,d0
  1518.  sub.w d0,ObjTimer(a0)
  1519.  bgt.s .nosee
  1520.  bsr CHECKFORDARK
  1521.  tst.b d0
  1522.  beq.s .nosee
  1523.  move.b #1,currentmode(a0)
  1524.  move.w #0,SecTimer(a0)
  1525.  move.b #1,WhichAnim(a0)
  1526.  move.w ANIMFACING,d0
  1527.  add.w d0,Facing(a0)
  1528.  rts
  1529. .nosee:
  1530.  move.b #0,WhichAnim(a0)
  1531.  move.w ANIMFACING,d0
  1532.  add.w d0,Facing(a0)
  1533.  rts
  1534.  
  1535. ***********************************************
  1536. ** GENERIC ROUTINES ***************************
  1537. ***********************************************
  1538.  
  1539. FLYTOCPTHEIGHT
  1540.  
  1541.  move.w MIDDLECPT,d0
  1542.  move.l CPtPos,a1
  1543.  move.w 4(a1,d0.w*8),d1
  1544.  
  1545.  bra intoflytoheight
  1546.  
  1547. FLYTOPLAYERHEIGHT:
  1548.  move.l PLR1_yoff,d1
  1549.  asr.l #7,d1
  1550.  
  1551. intoflytoheight:
  1552.  move.w 4(a0),d0
  1553.  cmp.w d0,d1
  1554.  bgt.s .flydown
  1555.  
  1556.  move.w objyvel(a0),d2
  1557.  
  1558.  sub.w #2,d2
  1559.  cmp.w #-32,d2
  1560.  bgt.s .nofastup
  1561.  move.w #-32,d2
  1562. .nofastup
  1563.  
  1564.  move.w d2,objyvel(a0)
  1565.  add.w d2,4(a0)
  1566.  
  1567.  bra CHECKFLOORCEILING
  1568.  
  1569. .flydown
  1570.  move.w objyvel(a0),d2
  1571.  
  1572.  add.w #2,d2
  1573.  cmp.w #32,d2
  1574.  blt.s .nofastdown
  1575.  move.w #32,d2
  1576. .nofastdown
  1577.  
  1578.  move.w d2,objyvel(a0)
  1579.  add.w d2,4(a0)
  1580.  
  1581. CHECKFLOORCEILING:
  1582.  
  1583.  move.w 4(a0),d2
  1584.  move.l thingheight,d4
  1585.  asr.l #8,d4
  1586.  move.w d2,d3
  1587.  sub.w d4,d2
  1588.  add.w d4,d3
  1589.  
  1590.  move.l objroom,a2
  1591.  
  1592.  move.l ToZoneFloor(a2),d0
  1593.  move.l ToZoneRoof(a2),d1
  1594.  tst.b ObjInTop(a0)
  1595.  beq.s .notintop
  1596.  move.l ToUpperFloor(a2),d0
  1597.  move.l ToUpperRoof(a2),d1
  1598. .notintop:
  1599.  
  1600.  asr.l #7,d0
  1601.  asr.l #7,d1
  1602.  
  1603.  cmp.w d0,d3
  1604.  blt.s .botnohit
  1605.  move.w d0,d3
  1606.  move.w d3,d2
  1607.  sub.w d4,d2
  1608.  sub.w d4,d2
  1609. .botnohit
  1610.  
  1611.  cmp.w d1,d2
  1612.  bgt.s .topnohit
  1613.  move.w d1,d2
  1614.  move.w d2,d3
  1615.  add.w d4,d3
  1616.  add.w d4,d3
  1617. .topnohit
  1618.  
  1619.  sub.w d4,d3
  1620.  move.w d3,4(a0)
  1621.  
  1622.  rts
  1623.  
  1624. STOREPLAYERPOS:
  1625.  move.w (a0),d0
  1626.  move.l #NASTYWORK,a2
  1627.  asl.w #4,d0
  1628.  add.w d0,a2
  1629.  move.w PLR1_xoff,lastx(a2)
  1630.  move.w PLR1_zoff,lasty(a2)
  1631.  move.l PLR1_Roompt,a3
  1632.  move.w (a3),lastzone(a2)
  1633.  
  1634.  moveq #0,d0
  1635.  move.b ToZoneCpt(a3),d0
  1636.  tst.b PLR1_StoodInTop
  1637.  beq.s .pnotintop
  1638.  move.b ToZoneCpt+1(a3),d0
  1639. .pnotintop:
  1640.  
  1641.  move.w d0,lastcpt(a2)
  1642.  
  1643.  move.b teamnumber(a0),d0
  1644.  blt.s .noteam
  1645.  move.l #TEAMWORK,a2
  1646.  asl.w #4,d0
  1647.  add.w d0,a2
  1648.  move.w PLR1_xoff,lastx(a2)
  1649.  move.w PLR1_zoff,lasty(a2)
  1650.  move.l PLR1_Roompt,a3
  1651.  move.w (a3),lastzone(a2)
  1652.  moveq #0,d0
  1653.  move.b ToZoneCpt(a3),d0
  1654.  tst.b PLR1_StoodInTop
  1655.  beq.s .pnotintop2
  1656.  move.b ToZoneCpt+1(a3),d0
  1657. .pnotintop2:
  1658.  move.w d0,lastcpt(a2)
  1659.  move.w (a0),SEENBY(a2)
  1660.  
  1661. .noteam:
  1662.  rts
  1663.  
  1664. GETROOMSTATS:
  1665.  
  1666.  move.w (a0),d0
  1667.  move.l ObjectPoints,a1
  1668.  lea (a1,d0.w*8),a1
  1669.  move.w newx,(a1)
  1670.  move.w newz,4(a1)
  1671.  
  1672. GETROOMSTATSSTILL: 
  1673.  move.l objroom,a2
  1674.  move.w (a2),12(a0)
  1675.  
  1676. ; move.w (a2),d0
  1677. ; move.l #ZoneBrightTable,a5
  1678. ; move.l (a5,d0.w*4),d0
  1679. ; tst.b ObjInTop(a0)
  1680. ; bne.s .okbit
  1681. ; swap d0
  1682. ;.okbit:
  1683. ; move.w d0,2(a0)
  1684.  
  1685.  move.l ToZoneFloor(a2),d0
  1686.  tst.b ObjInTop(a0)
  1687.  beq.s .notintop2
  1688.  move.l ToUpperFloor(a2),d0
  1689. .notintop2:
  1690.  move.l thingheight,d2
  1691.  asr.l #1,d2
  1692.  sub.l d2,d0
  1693.  asr.l #7,d0
  1694.  move.w d0,4(a0)
  1695.  
  1696.  move.w 12(a0),GraphicRoom(a0)
  1697.  
  1698.  rts
  1699.  
  1700. CHECKFORDARK:
  1701.  
  1702.  move.w (a0),d0
  1703.  move.l PLR1_Roompt,a3
  1704.  move.w (a3),d1
  1705.  cmp.w d1,d0
  1706.  beq.s NOTINDARK
  1707.  
  1708.  jsr GetRand
  1709.  and.w #31,d0
  1710.  cmp.w PLR1_RoomBright,d0
  1711.  bge.s NOTINDARK
  1712.  
  1713. INDARK:
  1714.  moveq #0,d0
  1715.  rts
  1716.  
  1717. NOTINDARK:
  1718.  moveq #-1,d0
  1719.  rts
  1720.  
  1721. CHECKINFRONT:
  1722.  
  1723. ; clr.b 17(a0)
  1724. ; rts
  1725.  
  1726.  move.w (a0),d0
  1727.  move.l ObjectPoints,a1
  1728.  move.w (a1,d0.w*8),newx
  1729.  move.w 4(a1,d0.w*8),newz
  1730.  
  1731.  move.w p1_xoff,d0
  1732.  sub.w newx,d0
  1733.  move.w p1_zoff,d1
  1734.  sub.w newz,d1
  1735.  
  1736.  move.w Facing(a0),d2
  1737.  and.w #8190,d2
  1738.  move.l #SineTable,a3
  1739.  move.w (a3,d2.w),d3
  1740.  add.l #2048,d2
  1741.  move.w (a3,d2.w),d4
  1742.  
  1743.  muls d3,d0
  1744.  muls d4,d1
  1745.  add.l d0,d1
  1746.  sgt.s d0
  1747.  rts
  1748.  
  1749. ANIMFACING: dc.w 0
  1750.  
  1751. LOOKFORPLAYER1:
  1752.  
  1753.  clr.b 17(a0)
  1754.  clr.b CanSee
  1755.  move.b ObjInTop(a0),ViewerTop
  1756.  move.b PLR1_StoodInTop,TargetTop
  1757.  move.l PLR1_Roompt,ToRoom
  1758.  move.l objroom,FromRoom
  1759.  move.w newx,Viewerx
  1760.  move.w newz,Viewerz
  1761.  move.w PLR1_xoff,Targetx
  1762.  move.w PLR1_zoff,Targetz
  1763.  move.l PLR1_yoff,d0
  1764.  asr.l #7,d0
  1765.  move.w d0,Targety
  1766.  move.w 4(a0),Viewery
  1767.  jsr CanItBeSeen
  1768.  
  1769.  
  1770.  tst.b CanSee
  1771.  beq .carryonprowling
  1772.  
  1773.  move.b #1,17(a0)
  1774. .carryonprowling:
  1775.  rts
  1776.  
  1777. CLRNASTYMEM:
  1778.  move.l #NASTYWORK,a0
  1779.  move.l #299,d0
  1780. .lopp
  1781.  move.l #0,(a0)
  1782.  move.l #-1,4(a0)
  1783.  move.l #-1,8(a0)
  1784.  add.w #16,a0
  1785.  dbra d0,.lopp
  1786.  
  1787.  move.l #TEAMWORK,a0
  1788.  move.l #29,d0
  1789. .lopp2
  1790.  move.l #0,(a0)
  1791.  move.l #-1,4(a0)
  1792.  move.l #-1,8(a0)
  1793.  add.w #16,a0
  1794.  dbra d0,.lopp2
  1795.  
  1796.  rts
  1797.  
  1798. CHECKDAMAGE:
  1799.  
  1800.  moveq #0,d2
  1801.  move.b damagetaken(a0),d2
  1802.  beq .noscream
  1803.  
  1804.  sub.b d2,numlives(a0)
  1805.  bgt .notdeadyet
  1806.  
  1807.  moveq #0,d0
  1808.  move.b teamnumber(a0),d0
  1809.  blt.s .noteam
  1810.  
  1811.  lea TEAMWORK(pc),a2
  1812.  asl.w #4,d0
  1813.  add.w d0,a2
  1814.  move.w (a0),d0
  1815.  cmp.w SEENBY(a2),d0
  1816.  bne.s .noteam
  1817.  move.w #-1,SEENBY(a2)
  1818. .noteam
  1819.  
  1820.  cmp.b #1,d2
  1821.  ble .noexplode
  1822.  
  1823.  movem.l d0-d7/a0-a6,-(a7)
  1824.  sub.l ObjectPoints,a1
  1825.  add.l #ObjRotated,a1
  1826.  move.l (a1),Noisex
  1827.  move.w #400,Noisevol
  1828.  move.w #14,Samplenum
  1829.  move.b #1,chanpick
  1830.  clr.b notifplaying
  1831.  st backbeat
  1832.  move.b 1(a0),IDNUM
  1833.  jsr MakeSomeNoise
  1834.  movem.l (a7)+,d0-d7/a0-a6
  1835.  
  1836.  movem.l d0-d7/a0-a6,-(a7)
  1837.  move.w #0,d0
  1838.  asr.w #2,d2
  1839.  tst.w d2
  1840.  bgt.s .ko
  1841.  moveq #1,d2
  1842. .ko:
  1843.  move.w #31,d3
  1844.  jsr ExplodeIntoBits
  1845.  movem.l (a7)+,d0-d7/a0-a6
  1846.  
  1847.  cmp.b #40,d2
  1848.  blt .noexplode
  1849.  
  1850.  move.w #-1,12(a0)
  1851.  move.w 12(a0),GraphicRoom(a0)
  1852.  rts
  1853.  
  1854. .noexplode:
  1855.  
  1856.  movem.l d0-d7/a0-a6,-(a7)
  1857.  sub.l ObjectPoints,a1
  1858.  add.l #ObjRotated,a1
  1859.  move.l (a1),Noisex
  1860.  move.w #200,Noisevol
  1861.  move.w screamsound,Samplenum
  1862.  move.b #1,chanpick
  1863.  clr.b notifplaying
  1864.  st backbeat
  1865.  move.b 1(a0),IDNUM
  1866.  jsr MakeSomeNoise
  1867.  movem.l (a7)+,d0-d7/a0-a6
  1868.  
  1869.  move.w #25,ThirdTimer(a0)
  1870.  move.w 12(a0),GraphicRoom(a0)
  1871.  rts
  1872.  
  1873. .notdeadyet:
  1874.  clr.b damagetaken(a0)
  1875.  movem.l d0-d7/a0-a6,-(a7)
  1876.  sub.l ObjectPoints,a1
  1877.  add.l #ObjRotated,a1
  1878.  move.l (a1),Noisex
  1879.  move.w #200,Noisevol
  1880.  move.w screamsound,Samplenum
  1881.  move.b #1,chanpick
  1882.  clr.b notifplaying
  1883.  move.b 1(a0),IDNUM
  1884.  st backbeat
  1885.  jsr MakeSomeNoise
  1886.  movem.l (a7)+,d0-d7/a0-a6
  1887.  
  1888.  
  1889. .noscream
  1890.  
  1891.  rts
  1892.  
  1893.  
  1894. SPLIBBLE:
  1895.  
  1896.  move.l ANIMPOINTER,a6
  1897.  
  1898.  jsr ViewpointToDraw
  1899.  add.l d0,d0
  1900.  
  1901.  cmp.b #1,VECOBJ
  1902.  bne.s .NOSIDES
  1903.  moveq #0,d0
  1904.  
  1905. .NOSIDES:
  1906.  
  1907.  muls #A_OptLen,d0
  1908.  add.w d0,a6
  1909.  
  1910.  move.w SecTimer(a0),d1
  1911.  add.w #1,d1
  1912.  move.w d1,d2
  1913.  muls #A_FrameLen,d1
  1914.  tst.b (a6,d1.w)
  1915.  bge.s .noendanim
  1916.  moveq #0,d2
  1917.  moveq #0,d1
  1918. .noendanim
  1919.  move.w d2,SecTimer(a0)
  1920.  
  1921.  move.l #0,8(a0)
  1922.  move.b (a6,d1.w),9(a0)
  1923.  move.b 1(a6,d1.w),11(a0)
  1924.  
  1925.  move.w #-1,6(a0)
  1926.  cmp.b #1,VECOBJ
  1927.  beq.s .nosize
  1928.  move.w 2(a6,d1.w),6(a0)
  1929. .nosize
  1930.  
  1931.  moveq #0,d0
  1932.  move.b 5(a6,d1.w),d0
  1933.  beq.s .nosoundmake
  1934.  
  1935.  movem.l d0-d7/a0-a6,-(a7)
  1936.  subq #1,d0
  1937.  move.w d0,Samplenum
  1938.  clr.b notifplaying
  1939.  move.b 1(a0),IDNUM
  1940.  move.w #200,Noisevol
  1941.  move.l #ObjRotated,a1
  1942.  move.w (a0),d0
  1943.  lea (a1,d0.w*8),a1
  1944.  move.l (a1),Noisex
  1945.  jsr MakeSomeNoise
  1946.  movem.l (a7)+,d0-d7/a0-a6
  1947. .nosoundmake
  1948.  
  1949.  move.b 6(a6,d1.w),d0
  1950.  sne DoAction
  1951.  
  1952.  rts
  1953.  
  1954.  
  1955. DOTORCH:
  1956.  move.w ALIENBRIGHT,d0
  1957.  bge.s .nobright
  1958.  
  1959.  move.w newx,d1
  1960.  move.w newz,d2
  1961.  move.w 4(a0),d3
  1962.  ext.l d3
  1963.  asl.l #7,d3
  1964.  move.l d3,BRIGHTY
  1965.  move.w Facing(a0),d4
  1966.  
  1967.  move.w 12(a0),d3
  1968.  
  1969.  jsr BRIGHTENPOINTSANGLE
  1970.   
  1971. .nobright:
  1972.  rts
  1973.  
  1974. FOIBLE:
  1975. WALKANIM:
  1976. ATTACKANIM:
  1977.  
  1978.  move.l d0,-(a7)
  1979.  
  1980.  move.l ANIMPOINTER,a6
  1981.  
  1982.  move.l WORKPTR,a5
  1983.  
  1984.  moveq #0,d1
  1985.  move.b 2(a5),d1
  1986.  bne.s .notview
  1987.  
  1988.  cmp.b #1,VECOBJ
  1989.  beq.s .notview
  1990.  
  1991.  jsr ViewpointToDraw
  1992.  add.w d0,d0
  1993.  move.w d0,d1
  1994.  
  1995. .notview
  1996.  
  1997.  muls #A_OptLen,d1
  1998.  add.l d1,a6
  1999.  
  2000.  move.w SecTimer(a0),d1
  2001.  tst.b 1(a5)
  2002.  blt.s .nospec
  2003.  
  2004.  move.b 1(a5),d1
  2005.  
  2006. .nospec:
  2007.  
  2008.  muls #A_FrameLen,d1
  2009.  
  2010.  st 1(a5)
  2011.  move.b (a5),DoAction
  2012.  clr.b (a5)
  2013.  move.b 3(a5),FINISHEDANIM
  2014.  clr.b 3(a5)
  2015.  
  2016.  move.l #0,8(a0)
  2017.  move.b (a6,d1.w),9(a0)
  2018.  move.b 1(a6,d1.w),d0
  2019.  ext.w d0
  2020.  bgt.s .noflip
  2021.  move.b #128,10(a0)
  2022.  neg.w d0
  2023. .noflip:
  2024.  sub.w #1,d0
  2025.  move.b d0,11(a0)
  2026.  
  2027.  
  2028.  move.w #0,ANIMFACING
  2029.  cmp.b #1,VECOBJ
  2030.  bne.s .noanimface
  2031.  move.w 2(a6,d1.w),ANIMFACING
  2032. .noanimface:
  2033.  
  2034. ******************************************
  2035.  move.w #-1,GraphicRoom-64(a0)
  2036.  move.w #-1,12-64(a0)
  2037.  
  2038.  move.w AUXOBJ,d3
  2039.  blt .noaux
  2040.  
  2041.  move.b 8(a6,d1.w),d0
  2042.  blt .noaux
  2043.  
  2044.  move.w 12(a0),12-64(a0)
  2045.  move.w 12(a0),GraphicRoom-64(a0)
  2046.  move.w 4(a0),4-64(a0)
  2047.  move.b ObjInTop(a0),ObjInTop-64(a0)
  2048.  
  2049.  move.b 9(a6,d1.w),d4
  2050.  move.b 10(a6,d1.w),d5
  2051.  
  2052.  ext.w d4
  2053.  ext.w d5
  2054.  add.w d4,d4
  2055.  add.w d5,d5
  2056.  
  2057.  move.w d4,auxxoff-64(a0)
  2058.  move.w d5,auxyoff-64(a0)
  2059.  
  2060.  move.l LINKFILE,a4
  2061.  move.l a4,a2
  2062.  add.l #ObjectDefAnims,a4
  2063.  add.l #ObjectStats,a2
  2064.  
  2065.  move.w d3,d4
  2066.  muls #O_AnimSize,d3
  2067.  muls #ObjectStatLen,d4
  2068.  add.l d4,a2
  2069.  add.l d3,a4
  2070.  
  2071.  muls #O_FrameStoreSize,d0
  2072.  
  2073.  cmp.w #1,O_GFXType(a2)
  2074.  blt.s .bitmap
  2075.  beq.s .vector
  2076.  
  2077. .glare:
  2078.  move.l #0,8-64(a0)
  2079.  move.b (a4,d0.w),d3
  2080.  ext.w d3
  2081.  neg.w d3
  2082.  move.w d3,8-64(a0)
  2083.  move.b 1(a4,d0.w),11-64(a0)
  2084.  move.w 2(a4,d0.w),6-64(a0)
  2085.  
  2086. ; move.b 4(a3,d0.w),d1 
  2087. ; ext.w d1
  2088. ; add.w d1,d1
  2089. ; add.w d1,4(a0)
  2090.  
  2091. ; moveq #0,d1
  2092. ; move.b 5(a3,d0.w),d1
  2093. ; move.w d1,ObjTimer(a0)
  2094.  
  2095.  bra .noaux
  2096.  
  2097. .vector:
  2098.  move.l #0,8-64(a0)
  2099.  move.b (a4,d0.w),9-64(a0)
  2100.  move.b 1(a4,d0.w),11-64(a0)
  2101.  move.w #$ffff,6-64(a0)
  2102. ; move.b 4(a3,d0.w),d1 
  2103. ; ext.w d1
  2104. ; add.w d1,d1
  2105. ; add.w d1,4(a0)
  2106.  
  2107. ; moveq #0,d1
  2108. ; move.b 5(a3,d0.w),d1
  2109. ; move.w d1,ObjTimer(a0)
  2110.  
  2111.  bra .noaux
  2112.  
  2113. .bitmap:
  2114.  
  2115.  move.l #0,8-64(a0)
  2116.  move.b (a4,d0.w),9-64(a0)
  2117.  move.b 1(a4,d0.w),11-64(a0)
  2118.  move.w 2(a4,d0.w),6-64(a0)
  2119. ; move.b 4(a4,d0.w),d1 
  2120. ; ext.w d1
  2121. ; add.w d1,d1
  2122. ; add.w d1,4(a0)
  2123.  
  2124. ; moveq #0,d1
  2125. ; move.b 5(a3,d0.w),d1
  2126. ; move.w d1,ObjTimer(a0)
  2127.  
  2128. .noaux:
  2129.  
  2130. ******************************************
  2131.  
  2132.  
  2133.  move.w #-1,6(a0)
  2134.  cmp.b #1,VECOBJ
  2135.  beq.s .nosize
  2136.  bgt.s .setlight
  2137.  move.w 2(a6,d1.w),6(a0)
  2138.  move.l (a7)+,d0
  2139.  rts
  2140.  
  2141. .nosize
  2142.  
  2143. ; move.l #$00090001,8(a0)
  2144.  
  2145.  move.l (a7)+,d0
  2146.  rts
  2147.  
  2148. .setlight:
  2149.  move.w 2(a6,d1.w),6(a0)
  2150.  
  2151.  move.b VECOBJ,d1
  2152.  or.b d1,10(a0)
  2153.  
  2154.  move.l (a7)+,d0
  2155.  rts
  2156.  
  2157. BLIBBLE:
  2158.  
  2159.  move.l ANIMPOINTER,a6
  2160.  
  2161.  move.w #8,d0
  2162.  
  2163.  muls #A_OptLen,d0
  2164.  add.w d0,a6
  2165.  
  2166.  move.w SecTimer(a0),d1
  2167.  move.w d1,d2
  2168.  add.w #1,d2
  2169.  muls #A_FrameLen,d1
  2170.  tst.b A_FrameLen(a6,d1.w)
  2171.  slt FINISHEDANIM
  2172.  bge.s .noendanim
  2173.  moveq #0,d2
  2174. .noendanim
  2175.  move.w d2,SecTimer(a0)
  2176.  
  2177.  move.l #0,8(a0)
  2178.  move.b (a6,d1.w),9(a0)
  2179.  move.b 1(a6,d1.w),11(a0)
  2180.  
  2181.  move.w #-1,6(a0)
  2182.  cmp.b #1,VECOBJ
  2183.  beq.s .nosize
  2184.  move.w 2(a6,d1.w),6(a0)
  2185. .nosize
  2186.  
  2187.  moveq #0,d0
  2188.  move.b 5(a6,d1.w),d0
  2189.  beq.s .nosoundmake
  2190.  
  2191.  movem.l d0-d7/a0-a6,-(a7)
  2192.  subq #1,d0
  2193.  move.w d0,Samplenum
  2194.  clr.b notifplaying
  2195.  move.b 1(a0),IDNUM
  2196.  move.w #200,Noisevol
  2197.  move.l #ObjRotated,a1
  2198.  move.w (a0),d0
  2199.  lea (a1,d0.w*8),a1
  2200.  move.l (a1),Noisex
  2201.  jsr MakeSomeNoise
  2202.  movem.l (a7)+,d0-d7/a0-a6
  2203. .nosoundmake
  2204.  
  2205.  move.b 6(a6,d1.w),d0
  2206.  sne DoAction
  2207.  
  2208.  rts
  2209.  
  2210. CHECKATTACKONGROUND:
  2211.  
  2212.  move.l PLR1_Roompt,a3
  2213.  moveq #0,d1
  2214.  move.b ToZoneCpt(a3),d1
  2215.  tst.b PLR1_StoodInTop
  2216.  beq.s .pnotintop
  2217.  move.b ToZoneCpt+1(a3),d1
  2218. .pnotintop:
  2219.  
  2220.  move.w d1,d3
  2221.  
  2222.  move.w CurrCPt(a0),d0
  2223.  
  2224.  cmp.w d0,d1
  2225.  beq.s .yesattack
  2226.  
  2227.  jsr GetNextCPt
  2228.  
  2229.  cmp.w d0,d3
  2230.  beq.s .yesattack
  2231.  
  2232. .noattack:
  2233.  
  2234.  clr.b d0
  2235.  rts
  2236.  
  2237. .yesattack:
  2238.  
  2239.  st d0
  2240.  
  2241.  rts
  2242.  
  2243. GETROOMCPT: 
  2244.  move.l objroom,a2
  2245.  moveq #0,d0
  2246.  move.b ToZoneCpt(a2),d0
  2247.  tst.b ObjInTop(a0)
  2248.  beq.s .pnotintop
  2249.  move.b ToZoneCpt+1(a2),d0
  2250. .pnotintop:
  2251.  
  2252.  move.w d0,CurrCPt(a0)
  2253.  rts
  2254.  
  2255.  
  2256. CALCSQROOT:
  2257.  tst.l d2
  2258.  beq .oksqr
  2259.  
  2260.  movem.l d0/d1/d3-d7/a0-a6,-(a7)
  2261.  
  2262.  move.w #31,d0
  2263. .findhigh
  2264.  btst d0,d2
  2265.  bne .foundhigh
  2266.  dbra d0,.findhigh
  2267. .foundhigh
  2268.  asr.w #1,d0
  2269.  clr.l d3
  2270.  bset d0,d3
  2271.  move.l d3,d0
  2272.  
  2273.  move.w d0,d1
  2274.  muls d1,d1    ; x*x
  2275.  sub.l d2,d1    ; x*x-a
  2276.  asr.l #1,d1    ; (x*x-a)/2
  2277.  divs d0,d1    ; (x*x-a)/2x
  2278.  sub.w d1,d0    ; second approx
  2279.  bgt .stillnot0
  2280.  move.w #1,d0
  2281. .stillnot0
  2282.  
  2283.  move.w d0,d1
  2284.  muls d1,d1
  2285.  sub.l d2,d1
  2286.  asr.l #1,d1
  2287.  divs d0,d1
  2288.  sub.w d1,d0    ; second approx
  2289.  bgt .stillnot02
  2290.  move.w #1,d0
  2291. .stillnot02
  2292.  
  2293.  move.w d0,d1
  2294.  muls d1,d1
  2295.  sub.l d2,d1
  2296.  asr.l #1,d1
  2297.  divs d0,d1
  2298.  sub.w d1,d0    ; second approx
  2299.  bgt .stillnot03
  2300.  move.w #1,d0
  2301. .stillnot03
  2302.  
  2303.  move.w d0,d2
  2304.  ext.l d2
  2305.  
  2306.  movem.l (a7)+,d0/d1/d3-d7/a0-a6
  2307.  
  2308. .oksqr
  2309.  rts
  2310.  
  2311.  
  2312.  
  2313. DoAction: dc.b 0
  2314. FINISHEDANIM: dc.b 0
  2315. NASTYWORK: ds.l 4*300
  2316. TEAMWORK: ds.l 4*30
  2317. DAMAGED: ds.w 300
  2318. DAMAGEPTR: dc.l 0